#!/bin/bash

# 服务目录列表
DIRS=(
  "gateway"    # 需要固定端口的服务
  "message"
  "mock"
  "project"
  "search"
  "thirdparty"
  "uaa"
  "frontend"
)

# 端口映射配置（服务名:容器端口:宿主机端口）
declare -A PORT_MAPPING=(
  ["gateway"]="8081:8080"  # 容器8080映射到宿主机8081
  ["frontend"]="80:80"
)

# 公共配置
IMAGE_TAG="latest"

for dir in "${DIRS[@]}"; do
  # 目录校验
  if [ ! -d "$dir" ]; then
    echo "错误：目录 $dir 不存在，跳过处理"
    continue
  fi
  cd "$dir" || exit 1

  # Dockerfile校验
  if [ ! -f "Dockerfile" ]; then
    echo "错误：$dir 中未找到 Dockerfile，跳过处理"
    cd ..
    continue
  fi

  # 镜像容器命名
  image_name="shizi-${dir##*/}-service:$IMAGE_TAG"
  container_name="shizi-${dir##*/}-service"

  # 清理旧资源
  echo "清理旧容器：$container_name"
  docker rm -f "$container_name" >/dev/null 2>&1
  echo "清理旧镜像：$image_name"
  docker rmi -f "$image_name" >/dev/null 2>&1

  # 构建镜像
  echo "正在构建 $dir 的镜像..."
  if docker build -t "$image_name" .; then
    echo "镜像构建成功：$image_name"
  else
    echo "错误：$dir 镜像构建失败，跳过后续步骤"
    cd ..
    continue
  fi

  # 动态生成端口参数
  port_args=""
  if [[ -n "${PORT_MAPPING[$dir]}" ]]; then
    IFS=':' read -ra ports <<< "${PORT_MAPPING[$dir]}"
    port_args="-p ${ports[0]}:${ports[1]}"  # 宿主机端口:容器端口
    echo "已配置固定端口映射：${ports[0]}->${ports[1]}"
  else
    port_args="-P"  # 其他服务使用动态端口
  fi

  # 运行容器
  echo "正在启动容器..."
  if docker run -d \
    --name "$container_name" \
    $port_args \
    -e NACOS_SERVER_ADDR=192.168.245.128:8848 \
    -e NACOS_NAMESPACE=6a3ff3d0-390f-4c85-8fa4-ae07eb4b8ca1 \
    -e NACOS_GROUP=DEFAULT_GROUP \
    "$image_name"; then
    echo "容器启动成功：$container_name"
    
    # 显示端口映射详情（仅固定端口服务）
    if [[ -n "${PORT_MAPPING[$dir]}" ]]; then
      echo "端口映射状态："
      docker port "$container_name"
    fi
  else
    echo "错误：$dir 容器启动失败"
  fi

  cd ..
done

echo "所有操作完成"
